package com.alinesno.cloud.common.facade.services;

import java.util.List;

import org.springframework.data.domain.Page;
import org.springframework.data.repository.NoRepositoryBean;
import org.springframework.lang.NonNull;

import com.alinesno.cloud.common.facade.orm.repository.IBaseJpaRepository;
import com.alinesno.cloud.common.facade.wrapper.RestWrapper;

/**
 * 业务服务基类
 * @author WeiXiaoJin
 * @since 2018年11月20日 下午7:51:58
 */
@NoRepositoryBean
public interface IBaseService <Entity , ID> extends IBaseJpaRepository<Entity , ID>{

	/**
	 * 批量删除 
	 * @param ids
	 */
	void deleteByIds(ID[] ids);

	/**
	 * 更新实体，这里只更新部分字段，并不会全部更新
	 */
	void update(Entity e) ;

	/**
	 * 更新实体，这里只更新部分字段，并不会全部更新
	 * @param id
	 */
	void updateById(Entity e , ID id);
	
	boolean modifyHasStatus(ID id);

	List<Entity> findAll(RestWrapper restWrapper);

	Page<Entity> findAllByWrapperAndPageable(RestWrapper restWrapper);

	Entity findEntityById(ID id);
	
	/**
	 * 找出前几条数据
	 * @param i
	 * @return
	 */
	List<Entity> findTop(int number , RestWrapper restWrapper);
	
	/**
	 * 条件删除 
	 * @param restWrapper
	 */
	void deleteByWrapper(RestWrapper restWrapper);

	//****************************** saas_api_start *****************************************/
	/**
	 * 租户list查询 
	 * @param restWrapper
	 * @return
	 */
	List<Entity> tenantFindList(@NonNull RestWrapper restWrapper);
	
	/**
	 * 租户one查询 
	 * 
	 * @param restWrapper
	 * @return
	 */
	Entity tenantFindOne(@NonNull RestWrapper restWrapper);
	//****************************** saas_api_end *****************************************/
}
